MENTAL, UN LENGUAJE
DE PATRONES

“El universo no está hecho de ‘cosas’, sino de patrones de geometrías interactivas complejas” (Christopher Alexander)

“Un patrón porta la esencia de una solución probada a un problema recurrente en un cierto contexto” (Brad Appleton)



El Lenguaje de Patrones, de Christopher Alexander

El concepto de “lenguaje de patrones” fue introducido en 1977 por el arquitecto Christopher Alexander en su libro “A Pattern Language” (Un lenguaje de patrones). Con el objeto de reducir la complejidad de la arquitectura y hacerla más humana, se propuso identificar y resolver los problemas esenciales que se presentaban en el diseño arquitectónico, creando un nuevo paradigma basado en un conjunto de patrones o soluciones fundamentales y una forma de combinarlos para generar diseños útiles y efectivos. Su método práctico y estructurado puso la arquitectura al alcance de personas no especializadas, para que pudieran diseñar su propia vivienda, sin necesidad de arquitectos.

Alexander se inspiró en los diseños de las antiguas culturas y en las atractivas y armoniosas ciudades medievales. Su método se basa en patrones clásicos, probados en el mundo real, prácticos y bellos. Identificó 15 características geométricas o estructurales recurrentes que las convirtió como fundamento de su método: 1) Niveles de escala; 2) Centros fuertes; 3) Fronteras; 4) Repetición alternante; 5) Espacio positivo; 6) Forma buena; 7) Simetrías locales; 8) Entrelazamiento (interlock) profundo y ambigüedad; 9) Contraste; 10) Gradientes; 11) Rugosidad (roughness); 12) Ecos; 13) El vacío; 14) Simplicidad y calma interior; 15) No separabilidad.

Estas 15 propiedades no son independientes. Se solapan.

A partir de estos 15 características geométricas construyó 253 patrones, que describió en dicho libro, también llamado “libro AIS”, por las iniciales de sus autores: Alexander, Ishikawa y Silverstein (ver Bibliografía). Ejemplos de patrones arquitectónicos utilizados por Alexander son: paseo, galería, patio compartido, estacionamiento, etc. El libro tuvo mucho impacto en su época, y ha sido uno de los libros más vendidos sobre arquitectura. De hecho, se ha convertido en una especie de Biblia de los arquitectos. Otro libro posterior de Alexander que profundiza en el tema de patrones es “The Timeless Way of Building” (El modo intemporal de construir), en el que aboga por una arquitectura en íntima fusión con la naturaleza. En libros posteriores (serie Nature of Order, La Naturaleza del Orden), Alexander profundizó en los aspectos filosóficos de los patrones. Su concepto central es el de “despliegue creativo”, una metáfora del crecimiento del embrión humano, un proceso de complejidad creciente: Algunas reflexiones de Alexander: Alexander estableció una nueva teoría de la naturaleza del espacio y la materia y su relación con nuestra conciencia, con nuestra visión del mundo. Su teoría intenta evitar el cisma entre lo objetivo y lo subjetivo.

Los 253 patrones propuestos por Alexander constituyen solo un ejemplo. Cada comunidad o grupo particular debe diseñar un conjunto de patrones propio. Aunque existen también patrones arquetípicos o esenciales, que son patrones comunes a todos los seres humanos.

Con los patrones arquitectónicos se dispone de una visión estructural, de una abstracción de alto nivel, que facilita el trabajo de los diseñadores. Incluso permitiría que los usuarios pudieran realizar sus propios diseños, los adecuados a sus necesidades.

Alexander fue también un pionero de la metodología CAD (diseño asistido por ordenador). Su libro “Notes on the Synthesis of Form” (Notas sobre la Síntesis de la Forma) es un clásico en este campo. También formó parte del grupo de científicos que desarrollaron la Teoría de Sistemas (junto con Herbert Simon).

Aunque Alexander aplicó el lenguaje de patrones al diseño arquitectónico, su sistema ha transcendido la disciplina de la arquitectura, habiendo influido de manera importante en distintos dominios, en los que también se puede aplicar esta filosofía genérica. La idea de lenguaje de patrones es universal, es aplicable a cualquier dominio que requiera una ingeniería de diseño. De hecho, su forma de presentar los patrones ha inspirado a los informáticos, que han aplicado sus ideas creativas al diseño de software. En este sentido se habla de “arquitectura del software”, en lugar de “ingeniería del software”. Alexander tuvo en su época tanta influencia como la programación estructurada de Edsger Dijkstra. También ha influido en el moderno movimiento denominado “Programación Extrema” (eXtreme Programming, XP).


El concepto de patrón

Un patrón (pattern) se pude definir como una unidad de información que captura la esencia de una familia de soluciones relativa a un problema (o conjunto de problemas) dentro de un cierto dominio o contexto.

Un sistema bien estructurado puede sistematizarse mediante patrones. Los patrones se pueden definir a diferentes niveles de abstracción. Tienen las características siguientes: El diseño de un sistema está relacionado con la función que tiene que realizar. Es por esto que funciones similares comparten un diseño común, con patrones de diseño similares, permitiendo establecer analogías entre sistemas. Es el viejo principio de “la función crea la forma”.


Lenguaje de patrones

Así como los patrones tienen una semántica y una sintaxis, los patrones de diseño deben de estar relacionados entre sí a través de un lenguaje de patrones. Un lenguaje de patrones se puede definir como un sistema para la descripción de una serie de elementos (patrones) y sus relaciones, de modo que permiten construir buenas soluciones a los diferentes problemas que aparecen en un contexto específico.

Un lenguaje de patrones se compone de un conjunto de patrones básicos y un conjunto de reglas combinatorias de dichos patrones (su gramática).

Un lenguaje de patrones debe tener las características siguientes: Un lenguaje de patrones aporta un lenguaje formal común entre especialistas de un dominio, una referencia conceptual del dominio. Es realmente un metalenguaje.


Patrones de software

Los patrones de software se han aplicado a muchas áreas de la informática, aunque principalmente en el diseño de software orientado a objetos. El objetivo es el mismo que en arquitectura: reducir la complejidad, formalizar el conocimiento de buenas soluciones e incluso facilitar el desarrollo de programas a los usuarios.

En 1987 Ward Cunningham y Kent Beck desarrollaron 5 patrones de interacción hombre-ordenador (ver Bibliografía).

El catálogo más famoso de patrones de software está incluido en el libro de Gamma et al. [2002], también llamado “libro GoF” (Gang of Four, la Banda de los Cuatro), por sus cuatro autores. Este libro tuvo un gran impacto en el mundo informático. Empezaron a recopilar patrones en 1990 y lo publicaron en 1994. Incluye 23 patrones divididos en 3 categorías: de creación de objetos, estructurales (adaptador, Bridge, Proxy, etc.) y de comportamiento (observador, visitante, mediador, intérprete, etc.). En el capítulo 2 se presenta un ejemplo de diseño de un editor de textos.

Ward Cunningham ha creado en Internet el Portland Pattern Repository, con cientos de patrones en diferentes campos, incluyendo muchos sobre Programación Extrema (eXtreme Programming).

Otros sistemas de patrones conocidos son el POSA [Buschmann et al., 1996] y el PEAA [Fowler, 2003]. En POSA se consideran tres categorías de sistemas: distribuidos, interactivos y adaptativos. En PEAA se consideran las categorías siguientes: capas, lógica, bases de datos, presentación web, concurrencia, estados de sesión y distribución.


Crítica de los patrones de software

Se ha criticado mucho la utilización de patrones de software. De hecho, el GoF fue sometido a un juicio-espectáculo en el que fueron acusados de “crímenes” contra la informática. Algunas de las críticas son:
MENTAL como Lenguaje Universal de Patrones

MENTAL se puede utilizar como lenguaje universal de patrones, por las siguientes razones:

Adenda

Antipatrones

Así como los patrones son buenas soluciones a problemas, los antipatrones son malas soluciones a problemas. Los antipatrones también se documentan, pues alertan a los diseñadores para que no escojan caminos erróneos. El libro "AntiPatterns" [Brown et al., 1998] describe muchos antipatrones de software.


Bibliografía

Patrones en arquitectura Patrones de software Sitios web de patrones de software